package utils

import (
	"fmt"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	"gopkg.in/natefinch/lumberjack.v2"
	"os"
	"time"
)

// SetLogger 设置日志目录
func SetLogger() *zap.Logger {
	logDir := "../../logs"
	// os包是Go语言标准库中的一个包,用于操作系统相关的功能,如文件操作、目录操作等
	if _, err := os.Stat(logDir); os.IsNotExist(err) {
		if err = os.MkdirAll(logDir, 0755); err != nil {
			panic(err)
		}
	}

	n := time.Now().Format("20060102")

	//logFilename := logDir + "/" + n + ".log" // ../../logs/20230501.log
	logFilename := fmt.Sprintf("%s/%s.log", logDir, n)

	w := zapcore.AddSync(&lumberjack.Logger{
		Filename:   logFilename,
		MaxSize:    100,
		MaxAge:     30,
		MaxBackups: 3,
		Compress:   true,
	})

	// 日志编码器,三个参数:
	// 1. 日志格式编码器,这里使用JSON格式
	// 2. 日志写入同步器,这里使用lumberjack.Logger
	// 3. 日志级别,这里使用DebugLevel
	core := zapcore.NewCore(zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), w, zapcore.DebugLevel)
	return zap.New(core)
}
